package com.scuec.groupfive.mapper;

import com.scuec.groupfive.entity.WrongQuestion;
import com.scuec.groupfive.vo.WrongQuestionVO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

@Mapper
public interface WrongQuestionMapper {
    // 获取错题列表（按错题次数降序）
    List<WrongQuestionVO> getWrongQuestionsByCount(@Param("userId") Long userId,
                                                  @Param("offset") Integer offset,
                                                  @Param("limit") Integer limit,
                                                  @Param("subjectCode") String subjectCode,
                                                  @Param("examType") String examType);

    // 新增方法：按错题次数降序查询VO
    List<WrongQuestionVO> selectVOByWrongCountDesc(@Param("userId") Long userId, 
                                                  @Param("offset") Integer offset, 
                                                 @Param("size") Integer size);

    // 获取错题列表（按科目和章节）
    List<WrongQuestionVO> getWrongQuestionsBySubjectChapter(@Param("userId") Long userId,
                                                           @Param("offset") Integer offset,
                                                           @Param("limit") Integer limit,
                                                           @Param("subjectCode") String subjectCode,
                                                           @Param("examType") String examType);

    // 新增方法：按科目和章节查询VO
    List<WrongQuestionVO> selectVOBySubjectChapter(@Param("userId") Long userId,
                                                  @Param("offset") Integer offset,
                                                 @Param("size") Integer size);

    // 获取错题列表（按时间顺序）
    List<WrongQuestionVO> getWrongQuestionsByTime(@Param("userId") Long userId,
                                                 @Param("isAsc") boolean isAsc,
                                                 @Param("offset") Integer offset,
                                                 @Param("limit") Integer limit,
                                                 @Param("subjectCode") String subjectCode,
                                                 @Param("examType") String examType);

    // 新增方法：按时间顺序查询VO
    List<WrongQuestionVO> selectVOByTimeOrder(@Param("userId") Long userId,
                                             @Param("order") String order,
                                             @Param("offset") Integer offset,
                                            @Param("size") Integer size);

    // 获取错题详情
    WrongQuestionVO getWrongQuestionDetail(@Param("id") Long id, @Param("userId") Long userId);

    // 获取错题总数
    Integer getWrongQuestionsCount(@Param("userId") Long userId);

    // 新增方法：获取错题总数
    Integer getTotalCount(@Param("userId") Long userId,
                         @Param("subjectCode") String subjectCode,
                         @Param("examType") String examType);

    // 更新错题次数
    int updateWrongCount(@Param("id") Long id, @Param("newCount") int newCount);

    // 新增方法：根据WrongQuestion实体更新错题次数
    int updateWrongCountByEntity(WrongQuestion entity);

    // 删除错题
    int deleteWrongQuestion(@Param("id") Long id);

    // 获取用户的薄弱知识点
    List<Map<String, Object>> getWeakPointsByUserId(@Param("userId") Long userId,
                                                   @Param("subjectId") Integer subjectId,
                                                   @Param("offset") Integer offset,
                                                   @Param("limit") Integer limit);

    // 获取薄弱知识点总数
    Integer getWeakPointsCount(@Param("userId") Long userId, @Param("subjectId") Integer subjectId);

    // 添加收藏
    int addFavorite(@Param("userId") Long userId, @Param("questionId") Long questionId);

    // 取消收藏
    int removeFavorite(@Param("userId") Long userId, @Param("questionId") Long questionId);

    // 检查收藏状态
    Boolean checkFavorite(@Param("userId") Long userId, @Param("questionId") Long questionId);

    // 调试方法：检查科目数据
    List<Map<String, Object>> checkSubjects();

    // 调试方法：检查错题数据
    Map<String, Object> checkWrongQuestions();

    // 调试方法：检查错题与科目的关联
    List<Map<String, Object>> checkWrongQuestionsWithSubjects();
}
